package pers.xiaojun.boot.module.system.service.oauth2;

import pers.xiaojun.boot.module.system.service.oauth2.dto.OAuth2CodeCreateDTO;
import pers.xiaojun.boot.module.system.service.oauth2.dto.OAuth2CodeDTO;
import pers.xiaojun.boot.module.system.service.oauth2.dto.OAuth2TokenDTO;

import java.util.List;

/**
 * OAuth 2.0 授予权限服务类
 *
 * @author xiaojun
 * @since 2025-10-19
 */
public interface OAuth2GrantService {

    /**
     * 授予 AuthorizationCode 授权码
     *
     * @param clientId     客户端id
     * @param responseType 响应类型
     * @param scopes       授权范围
     * @param redirectUri  重定向地址
     * @param state        状态码
     * @return 授权码信息
     */
    OAuth2CodeDTO grantAuthorizationCode(String clientId, String responseType, List<String> scopes, String redirectUri, String state);

    /**
     * 通过授权码生成Token
     *
     * @param clientId 客户端Id
     * @param secret   密钥
     * @param code     code
     * @return Token
     */
    OAuth2TokenDTO grantTokenByAuthorizationCode(String clientId, String secret, String code);


    /**
     * 根据刷新令牌获取Token
     *
     * @param refreshToken 刷新令牌
     * @return Token
     */
    OAuth2TokenDTO grantTokenByRefreshToken(String refreshToken, String clientId);

}
